977. 有序数组的平方

977. 有序数组的平方

分析

其实一看到这个题目,我想到的就是重新根据绝对值排序,同时官方题解根据非递减顺序排序这个特征,指出了,排序的具体操作,那就是两头的数字肯定比中间的大,我们用两个指针,一个指向头,一个指向尾,把大的拿出来放到结果中,这样直到两个指针相遇,这样的话,那我干脆就直接比较元素的平方算了,就不用比较元素的绝对值了。

解题

public int[] sortedSquares(int[] nums) {
    int[] target = new int[nums.length];
    int tIndex =nums.length-1;
    int start=0,end=nums.length-1;
    for(;start<=end;){
        // start 和 end 可能指向同一个元素,因此循环中必须处理元素相同的情况。
        int targetEle = -1;
        if(nums[start]*nums[start] > nums[end]*nums[end]){
            targetEle = nums[start]*nums[start];
            start++;
        }else{
			// 元素相等的时候也移动
            targetEle = nums[end]*nums[end];
            end--;
        }
        target[tIndex] = targetEle;
        tIndex--;
    }
    return target;
}

相关题

26. 删除有序数组中的重复项
27. 移除元素
283. 移动零
844. 比较含退格的字符串
滑动窗口
209. 长度最小的子数组
904. 水果成篮